package 热题100.矩阵.矩阵置零_73_中等;

import java.util.HashSet;
import java.util.Set;

/*
给定一个 m x n 的矩阵，如果一个元素为 0 ，则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。

思路：
    一：
    1. 遍历矩阵，将为零的数字行列用set集合记录下来（去重） 这一步也可以用两个标记数组
    2. 置为0 如果两个标记数组任意一个为0就将结果置为0
* */
public class Solution {
    public static void main(String[] args) {
        int[][] matrix = {
                {1, 1, 1},
                {1, 0, 1},
                {1, 1, 1}
        };
        setZeroes(matrix);
        for (int i = 0; i < matrix.length; i ++){
            for (int j = 0; j < matrix[i].length; j ++){
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
    }

    public static void setZeroes(int[][] matrix) {
        Set<Integer> row = new HashSet<>();
        Set<Integer> ral = new HashSet<>();
        for (int i = 0; i < matrix.length; i ++){
            for (int j = 0; j < matrix[i].length; j ++){
                if (matrix[i][j] == 0){
                    row.add(i);
                    ral.add(j);
                }
            }
        }
        for (int num : row){
            for (int i = 0; i < matrix[num].length; i ++){
                matrix[num][i] = 0;
            }
        }
        for (int num : ral){
            for (int i = 0; i < matrix.length; i ++){
                matrix[i][num] = 0;
            }
        }
    }
}
